/**
 * package: admin
 * author: zhaiyujin
 * description:
 */
package admin

import (

	"github.com/kataras/iris/v12"
	"huanteng/vendors/paginate"
	"huanteng/vendors/validator"
	"huanteng/web/global/application"
	"huanteng/web/helpers"
	"huanteng/web/models"
	"huanteng/web/services"

	//"huanteng/web/services"
)

type MenuController struct {
	Service *services.MenuService
}

// @Summary 添加菜单
// @title 翟玉进
// @Description 添加菜单,
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Param parent_id body int true "0是顶级"
// @Param url body int false "url地址,模块是没有url的"
// @Param name body int true "名称"
// @Param sequence body int false "排序默认0"
// @Param menu_type body int true "1模块2菜单3操作"
// @Param status body int true "1启用2不启用"
// @Param code body int true "前端的Code"
// @Param icon body int false "图标 icon"
// @Param method body int true "操作类型:post,get,put,del,del,view,update,list"
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu [Post]
func (r *MenuController) Post(ctx iris.Context)*helpers.Response {
	menu:=models.Menu{}
	err:=validator.ValidateInfo(ctx.ReadJSON(&menu))
	if err!=nil{
		return helpers.FailedMsg(err.Error())
	}
	err=r.Service.Create(&menu)
	if err!=nil{
		return helpers.FailedMsg(err.Error())
	}
	return helpers.SuccessData(menu)

}

// @Summary 菜单列表
// @title 翟玉进
// @Description 菜单列表
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Param body body int true "json格式[1,2,3]"
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu [Get]
func (r *MenuController) Get(ctx iris.Context)*helpers.Response {
	r.Service.Index(ctx)
	return helpers.SuccessData(paginate.Page)

}

// @Summary 所有菜单
// @title 翟玉进
// @Description 菜单列表
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Param body body int true "json格式[1,2,3]"
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu [Get]
func (r *MenuController) GetAll(ctx iris.Context)*helpers.Response {

	return helpers.SuccessData(r.Service.GetAll())

}



// @Summary 菜单更新
// @title 翟玉进
// @Description 菜单更新
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Param body body int true " "
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu [Put]
func (r *MenuController) Put(ctx iris.Context)*helpers.Response {
	r.Service.Update(ctx)
	return helpers.SuccessMsg()

}

// @Summary 菜单详情
// @title 翟玉进
// @Description 菜单详情
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Param body body int true " "
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu/{int} [Get]
func (r *MenuController) GetBy(id uint,ctx iris.Context)*helpers.Response {

	return helpers.SuccessData(r.Service.Detail(id))

}

// @Summary 菜单删除
// @title 翟玉进
// @Description 菜单删除 请求参数[1,2,3,4]
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu [Delete]
func (r *MenuController)Delete(ctx iris.Context) *helpers.Response {
	// HandleError注册一个`hero.ErrorHandlerFunc`，当应用程序的控制器的函数返回非nil错误时将触发该错误。 //每个控制器都可以通过实现`hero.ErrorHandler`来覆盖它。
	err:=r.Service.Delete(ctx)
	if err!=nil{
		return helpers.FailedMsg(err.Error())
	}

	return helpers.SuccessMsg()

}

// @Summary 菜单操作按钮
// @title 翟玉进
// @Description 这个是列表右侧的操作按钮
// @Tags 菜单管理
// @Accept json
// @Produce  json
// @Success 0 {string} json "{"code":0,"data":"name","msg":"success"}"
// @Router /admin/menu/button [get]
func (r *MenuController) GetButtonBy(menuCode string)*helpers.Response {
	id:=application.Uid
	str,err:=r.Service.MenuButtonList(id,menuCode)
	if err!=nil{
		return helpers.FailedMsg(err.Error())
	}
	return helpers.SuccessData(str)

}

